﻿// 8. 二维费用的背包问题.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>


using namespace std;

/*
https://www.acwing.com/problem/content/8/
有 N 件物品和一个容量是 V 的背包，背包能承受的最大重量是 M。
每件物品只能用一次。体积是 vi，重量是 mi，价值是 wi。
求解将哪些物品装入背包，可使物品总体积不超过背包容量，总重量不超过背包可承受的最大重量，且价值总和最大。
输出最大价值。

输入格式
第一行三个整数，N,V,M，用空格隔开，分别表示物品件数、背包容积和背包可承受的最大重量。
接下来有 N 行，每行三个整数 vi,mi,wi，用空格隔开，分别表示第 i 件物品的体积、重量和价值。

输出格式
输出一个整数，表示最大价值。

数据范围
0<N≤1000
0<V,M≤100
0<vi,mi≤100
0<wi≤1000
输入样例
4 5 6
1 2 3
2 4 4
3 4 5
4 5 6
输出样例：
8
*/

const int N = 1010, V = 105, M = 105;
int dp[N][V][M];

int n, v, m;
struct ELE {
	int v, m, w;
}ele[N];


int main()
{
	cin >> n >> v >> m;
	for (int i = 1; i <= n; i++) {
		cin >> ele[i].v >> ele[i].m >> ele[i].w;
	}
	int ans = 0;
	for (int i = 1; i <= n; i++) {
		for (int j = 0; j <= v; j++) {
			for (int k = 0; k <= m; k++) {
				dp[i][j][k] = dp[i - 1][j][k];
				if (j >= ele[i].v && k >= ele[i].m) {
					dp[i][j][k] = max(dp[i][j][k], dp[i - 1][j - ele[i].v][k - ele[i].m] + ele[i].w);
				}
				ans = max(ans, dp[i][j][k]);
			}
		}
	}

	cout << ans << endl;

	return 0;
}

 